package com.imooc.api.controller.user;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;

/**
 * @Description :
 * @Author : YTY
 * @Date : 2020-11-28 09:15
 */

@Api(value = "controller的标题", tags = {"xx功能的controller"})
public interface HelloControllerApi {

    /**
     * api 的作用：
     * api 就相当于企业的领导，老板，部门经理
     * 其他的服务层都是实现，他们就相当于员工，只做事
     * 老板（开发人员）来看一下每个人（服务）的进度，做啥事
     * 老板不会去问员工，他只会对接部门经理
     * 那么里的所有api 接口就是统一在这里进行管理和调度的，微服务也是如此
     */

    /**
     * 运作：
     * 现在的所有接口都在此暴露，实现都是在各自的微服务中
     * 本项目只写接口，不写实现，实现在各自的微服务中，因为以业务来划分的微服务有很多
     * controller 也会分散在各个微服务中，一旦多了，就很难管理和查看
     *
     * 其次，微服务之间的调用都是基于接口的
     * 如果不这么做，微服务之间的调用就需要相互依赖
     * 耦合度也就高了，接口的目的为了解耦
     *
     * 此外，本工程的接口其实就是一套规范，实现都是由各自的工程去处理
     * 目前我们使用 Spring Boot 作为接口实现
     * 未来如果出现新的 Java Web 框架，那么我们不需要修改接口
     * 只需要修改对应的实现就可以，这也是解耦的一个体现
     *
     * Swagger2，基于接口文档的自动生成
     * 所有配置文件只需要一份，就能在当前项目中构建了
     * 管理起来很方便
     *
     * 综上所述，如此做法可以提高多服务的项目可扩展性
     */

    @ApiOperation(value = "hello方法的接口", notes = "hello方法的接口", httpMethod = "GET")
    @GetMapping("/hello")
    public Object Hello();
}
